/*
  模拟栈操作
  题目描述
    给出 n 种栈操作，包括
      push x, 将整数 x 入栈
      pop，弃栈顶，成功则输出 pop x，否则输出 pop fail
      top，取栈顶，成功则输出 top = x，否则输出 top fail
      size，求栈内元素数，输出 size = x
      empty，询问栈是否为空，为空则输出 yes，否则输出 no
  输入
    第一行 n，表示 n 次操作
    接下来 n 行，每行一个操作，格式如上描述
  输出
    根据操作要求进行输出
  样例输入
    6
    empty
    push 10
    empty
    size
    top
    pop
  样例输出
    yes
    no
    size = 1
    top = 10
    pop 10
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    stack <int> sta;
    vector <string> str;
    int n;

    cin >> n;

    for (int i = 1; i <= n; i++) {
        string s;
        cin >> s;
        if (s == "empty") {
            if (sta.empty()) {
                str.push_back("yes");
            } else {
                str.push_back("no");
            }
        } else if (s == "push") {
            int x;
            cin >> x;
            sta.push(x);
        } else if (s == "pop") {
            string y;
            y = "pop ";
            if (!sta.empty()) {
                y = y + to_string(sta.top()); // 注意: 这里调用 to_string() 函数将整形数转成字符串
                sta.pop();
            } else {
                y = y + "fail";
            }
            str.push_back(y);
        } else if(s == "top") {
            string y;
            if (!sta.empty()) {
                y = "top = ";
                y = y + to_string(sta.top());  // 注意: 这里调用 to_string() 函数将整形数转成字符串
            } else {
                y = "top ";
                y = y + "fail";
            }
            str.push_back(y);
        } else if (s == "size") {
            string y;
            y = "size = ";
            y = y + to_string(sta.size());  // 注意: 这里调用 to_string() 函数将整形数转成字符串
            str.push_back(y);
        }
    }

    for (auto it = str.begin(); it!=str.end(); it++) {
        cout << *it << endl;
    }

    return 0;
}